package com.xunan.demo.service;

import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class WechatUserService {

    /**
     * 微信支付小程序APP ID
     */
    @Value("${wechat-payment.wechat-mini-app.app-id}")
    String WECHAT_MINI_APP_APP_ID;

    /**
     * 微信支付小程序APP SECRET
     */
    @Value("${wechat-payment.wechat-mini-app.app-secret}")
    String WECHAT_MINI_APP_APP_SECRET;

    /**
     * 用户唯一标识
     *
     * @param loginCode 临时登录凭证 loginCode
     * @return 用户唯一标识
     */
    public String getUserWechatOpenId(String loginCode) {
        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JS_CODE&grant_type=authorization_code";
        url = url.replace("APPID", WECHAT_MINI_APP_APP_ID);
        url = url.replace("SECRET", WECHAT_MINI_APP_APP_SECRET);
        url = url.replace("JS_CODE", loginCode);

        //网络请求
        String httpExecuteResult = HttpRequest.get(url).execute().body();
        JSONObject jsonObject = new JSONObject(httpExecuteResult);

        //获取错误代码（有可能不存在）
        int errCode = jsonObject.get("errcode") == null ? 0 : (Integer) jsonObject.get("errcode");

        if (errCode == 0) {
            return (String) jsonObject.get("openid");
        } else {
            log.error("无法获取用户OpenId，错误信息：" + httpExecuteResult);
            return null;
        }

    }

}
